#!/bin/bash

# Diawi 配置测试脚本
# 用于验证 Diawi token 和网络连接

set -e

# 加载配置
source "$(dirname "$0")/diawi_config.sh"

# 颜色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

# 显示配置信息
show_config() {
    echo ""
    echo "🔧 当前配置信息"
    echo "=================================="
    echo "项目名称: $PROJECT_DISPLAY_NAME"
    echo "Diawi Token: ${DIAWI_TOKEN:0:10}..."
    echo "构建模式: $ANDROID_BUILD_MODE"
    echo "目标平台: $ANDROID_TARGET_PLATFORM"
    echo "=================================="
    echo ""
}

# 检查必需依赖
check_dependencies() {
    print_info "检查必需依赖..."
    
    local missing_deps=()
    
    if ! command -v curl &> /dev/null; then
        missing_deps+=("curl")
    fi
    
    if ! command -v flutter &> /dev/null; then
        missing_deps+=("flutter")
    fi
    
    if [ ${#missing_deps[@]} -eq 0 ]; then
        print_success "✅ 所有必需依赖已安装"
    else
        print_error "❌ 缺少以下依赖: ${missing_deps[*]}"
        return 1
    fi
    
    # 检查可选依赖
    if ! has_jq; then
        print_warning "⚠️  jq 未安装（可选但推荐）"
        install_jq_hint
    else
        print_success "✅ jq 已安装"
    fi
}

# 检查网络连接
check_network() {
    print_info "检查网络连接..."
    
    if curl -s --max-time 10 "https://www.diawi.com" > /dev/null; then
        print_success "✅ Diawi 网站连接正常"
    else
        print_error "❌ 无法连接到 Diawi 网站"
        return 1
    fi
}

# 验证 Diawi Token
validate_token() {
    print_info "验证 Diawi Token..."
    
    # 创建一个测试文件
    local test_file="test_file.txt"
    echo "Diawi token test - $(date)" > "$test_file"
    
    # 尝试上传测试文件（这会失败，但能验证token是否有效）
    local response=$(curl -s -X POST \
        -F "token=$DIAWI_TOKEN" \
        -F "file=@$test_file" \
        -F "comment=Token validation test" \
        "$DIAWI_UPLOAD_URL" 2>/dev/null || echo '{"error":"network_error"}')
    
    # 清理测试文件
    rm -f "$test_file"
    
    # 检查响应
    if echo "$response" | grep -q "job\|error.*format"; then
        print_success "✅ Diawi Token 有效"
        if echo "$response" | grep -q "error.*format"; then
            print_info "ℹ️  测试文件格式不支持（这是正常的）"
        fi
    elif echo "$response" | grep -q "error.*token"; then
        print_error "❌ Diawi Token 无效或过期"
        return 1
    else
        print_warning "⚠️  无法验证 Token，可能是网络问题"
        echo "响应: $response"
    fi
}

# 检查Flutter项目
check_flutter_project() {
    print_info "检查 Flutter 项目..."
    
    if [ ! -f "pubspec.yaml" ]; then
        print_error "❌ 当前目录不是 Flutter 项目"
        return 1
    fi
    
    local version=$(get_version)
    print_success "✅ Flutter 项目检测成功 (版本: $version)"
    
    # 检查平台支持
    if [ -d "android" ]; then
        print_success "✅ Android 平台支持"
    else
        print_warning "⚠️  Android 目录不存在"
    fi
    
    if [ -d "ios" ]; then
        if [[ "$OSTYPE" == "darwin"* ]]; then
            print_success "✅ iOS 平台支持"
        else
            print_warning "⚠️  iOS 目录存在但当前系统不是 macOS"
        fi
    else
        print_warning "⚠️  iOS 目录不存在"
    fi
}

# 检查构建路径
check_build_paths() {
    print_info "检查构建路径..."
    
    local android_dir="build/app/outputs/flutter-apk"
    local ios_dir="build/ios"
    
    if [ -d "$android_dir" ]; then
        print_success "✅ Android 构建目录存在"
        if [ -f "$ANDROID_APK_PATH" ]; then
            local size=$(ls -lh "$ANDROID_APK_PATH" | awk '{print $5}')
            print_info "📱 找到现有 APK: $ANDROID_APK_PATH ($size)"
        fi
    else
        print_info "ℹ️  Android 构建目录不存在（运行构建后会创建）"
    fi
    
    if [[ "$OSTYPE" == "darwin"* ]] && [ -d "$ios_dir" ]; then
        print_success "✅ iOS 构建目录存在"
        if [ -f "$IOS_IPA_PATH" ]; then
            local size=$(ls -lh "$IOS_IPA_PATH" | awk '{print $5}')
            print_info "📱 找到现有 IPA: $IOS_IPA_PATH ($size)"
        fi
    fi
}

# 主函数
main() {
    echo ""
    echo "🧪 Diawi 配置测试"
    echo "=================="
    
    show_config
    
    local test_results=()
    
    # 运行所有测试
    if check_dependencies; then
        test_results+=("依赖检查: ✅")
    else
        test_results+=("依赖检查: ❌")
    fi
    
    if check_network; then
        test_results+=("网络连接: ✅")
    else
        test_results+=("网络连接: ❌")
    fi
    
    if validate_token; then
        test_results+=("Token验证: ✅")
    else
        test_results+=("Token验证: ❌")
    fi
    
    if check_flutter_project; then
        test_results+=("Flutter项目: ✅")
    else
        test_results+=("Flutter项目: ❌")
    fi
    
    check_build_paths
    test_results+=("路径检查: ✅")
    
    # 显示测试结果
    echo ""
    echo "📊 测试结果总结"
    echo "================"
    for result in "${test_results[@]}"; do
        echo "$result"
    done
    
    # 计算成功率
    local success_count=$(echo "${test_results[@]}" | grep -o "✅" | wc -l)
    local total_count=${#test_results[@]}
    
    echo ""
    echo "成功率: $success_count/$total_count"
    
    if [ $success_count -eq $total_count ]; then
        print_success "🎉 所有测试通过！您可以开始使用自动化脚本了。"
        echo ""
        echo "💡 推荐命令："
        echo "   ./scripts/upload_to_diawi.sh -a    # 仅构建和上传 Android"
        echo "   ./scripts/quick_upload.sh          # 快速上传现有 APK"
        exit 0
    else
        print_warning "⚠️  部分测试失败，请检查上述问题后重试。"
        exit 1
    fi
}

# 运行主函数
main 